home *** CD-ROM | disk | FTP | other *** search
- /* ------------------------------------------------------------------------
- -- ERWRELIN.SIX --
- -- Copyright (C) Logic Works, Inc. 1994 --
- -- --
- -- Stored function to insert ERwin relationships into the --
- -- Designer 2000 dictionary --
- ------------------------------------------------------------------------- */
- CREATE OR REPLACE FUNCTION ERWRELIN(pEntFrom CI_ENTITIES.NAME%TYPE,
- pEntTo CI_ENTITIES.NAME%TYPE,
- pEntFromID CI_ENTITIES.ID%TYPE,
- pEntToID CI_ENTITIES.ID%TYPE,
- pOptional VARCHAR2,
- pName1 CI_RELATIONSHIP_ENDS.NAME%TYPE,
- pName2 CI_RELATIONSHIP_ENDS.NAME%TYPE,
- pApp CI_APPLICATION_SYSTEMS.NAME%TYPE,
- pVersion CI_APPLICATION_SYSTEMS.VERSION%TYPE,
- pType SMALLINT,
- pCardinality CI_RELATIONSHIP_ENDS.MAXIMUM_CARDINALITY%TYPE)
- RETURN CI_RELATIONSHIP_ENDS.ID%TYPE
- AS
- TYPE recEntity IS RECORD
- (APPLICATION_SYSTEM_OWNED_BY CI_ENTITIES.APPLICATION_SYSTEM_OWNED_BY%TYPE,
- ID CI_ENTITIES.ID%TYPE,
- NAME CI_ENTITIES.NAME%TYPE);
- TYPE recRelend IS RECORD
- (FROM_ENTITY_REFERENCE CI_RELATIONSHIP_ENDS.FROM_ENTITY_REFERENCE%TYPE,
- ID CI_RELATIONSHIP_ENDS.ID%TYPE,
- NAME CI_RELATIONSHIP_ENDS.NAME%TYPE,
- TO_ENTITY_REFERENCE CI_RELATIONSHIP_ENDS.TO_ENTITY_REFERENCE%TYPE);
- prRelend recRelend;
- stRelend ciorelationship_end.data;
- stEntity cioentity.data;
- prEntity recEntity;
- ToEntityRef CI_ENTITIES.ID%TYPE;
- FromEntityRef CI_ENTITIES.ID%TYPE;
- RelEnd1 CI_RELATIONSHIP_ENDS.ID%TYPE;
- RelEnd2 CI_RELATIONSHIP_ENDS.ID%TYPE;
- EndInsFail EXCEPTION;
- vMaxCard CI_RELATIONSHIP_ENDS.MAXIMUM_CARDINALITY%TYPE;
- vMinCard CI_RELATIONSHIP_ENDS.MINIMUM_CARDINALITY%TYPE;
- act_status varchar2(100);
- act_warnings varchar2(100);
- BEGIN
- if cdapi.initialized = false then
- RETURN -1;
- end if;
- BEGIN
- IF pVersion = 0 THEN
- SELECT APPLICATION_SYSTEM_OWNED_BY, ID, NAME INTO prEntity
- FROM CI_ENTITIES
- WHERE CI_ENTITIES.NAME=UPPER(pEntFrom)
- AND CI_ENTITIES.APPLICATION_SYSTEM_OWNED_BY =
- (SELECT ID FROM CI_APPLICATION_SYSTEMS WHERE
- CI_APPLICATION_SYSTEMS.NAME = UPPER(pApp) AND
- CI_APPLICATION_SYSTEMS.LATEST_VERSION_FLAG='Y');
- ELSE
- SELECT APPLICATION_SYSTEM_OWNED_BY, ID, NAME INTO prEntity
- FROM CI_ENTITIES
- WHERE CI_ENTITIES.NAME=UPPER(pEntFrom)
- AND CI_ENTITIES.APPLICATION_SYSTEM_OWNED_BY =
- (SELECT ID FROM CI_APPLICATION_SYSTEMS WHERE
- CI_APPLICATION_SYSTEMS.NAME = UPPER(pApp) AND
- CI_APPLICATION_SYSTEMS.VERSION=pVersion);
- END IF;
- dbms_output.put_line('In relationship: From entity found '||prEntity.ID);
- FromEntityRef := prEntity.ID;
- EXCEPTION
- WHEN OTHERS THEN
- IF pEntFromID = 0 THEN
- RETURN -1;
- ELSE
- FromEntityRef := pEntFromID;
- END IF;
- END;
- BEGIN
- IF pVersion = 0 THEN
- SELECT APPLICATION_SYSTEM_OWNED_BY, ID, NAME INTO prEntity
- FROM CI_ENTITIES
- WHERE CI_ENTITIES.NAME=UPPER(pEntTo)
- AND CI_ENTITIES.APPLICATION_SYSTEM_OWNED_BY =
- (SELECT ID FROM CI_APPLICATION_SYSTEMS WHERE
- CI_APPLICATION_SYSTEMS.NAME = UPPER(pApp) AND
- CI_APPLICATION_SYSTEMS.LATEST_VERSION_FLAG='Y');
- ELSE
- SELECT APPLICATION_SYSTEM_OWNED_BY, ID, NAME INTO prEntity
- FROM CI_ENTITIES
- WHERE CI_ENTITIES.NAME=UPPER(pEntTo)
- AND CI_ENTITIES.APPLICATION_SYSTEM_OWNED_BY =
- (SELECT ID FROM CI_APPLICATION_SYSTEMS WHERE
- CI_APPLICATION_SYSTEMS.NAME = UPPER(pApp) AND
- CI_APPLICATION_SYSTEMS.VERSION=pVersion);
- END IF;
- dbms_output.put_line('In relationship: To entity found '||prEntity.ID);
- ToEntityRef := prEntity.ID;
- EXCEPTION
- WHEN OTHERS THEN
- IF pEntToID = 0 THEN
- RETURN -1;
- ELSE
- ToEntityRef := pEntToID;
- END IF;
- END;
- IF pType = 9 THEN
- BEGIN
- stEntity.v.NAME := pEntTo;
- stEntity.i.NAME := true;
- stEntity.v.SUPERTYPE_REFERENCE := FromEntityRef;
- stEntity.i.SUPERTYPE_REFERENCE := true;
- cdapi.open_activity;
- cioentity.upd(ToEntityRef,stEntity);
- cdapi.validate_activity(act_status, act_warnings);
- cdapi.close_activity(act_status);
- if act_status != 'Y' then
- cdapi.abort_activity;
- RETURN -1;
- else
- RETURN ToEntityRef;
- end if;
- EXCEPTION
- WHEN OTHERS THEN
- if cdapi.stacksize > 0 then
- if cdapi.activity is not null then
- cdapi.abort_activity;
- end if;
- else
- if cdapi.activity is not null then
- cdapi.abort_activity;
- end if;
- end if;
- RETURN -1;
- END;
- ELSE
- SELECT R1.FROM_ENTITY_REFERENCE,R1.ID,
- R1.NAME, R1.TO_ENTITY_REFERENCE
- INTO prRelend
- FROM CI_RELATIONSHIP_ENDS R1,
- CI_RELATIONSHIP_ENDS R2
- WHERE R1.FROM_ENTITY_REFERENCE=FromEntityRef
- AND R1.TO_ENTITY_REFERENCE=ToEntityRef
- AND R1.NAME=pName1 AND
- R1.OTHER_RELATIONSHIP_END_REF=R2.ID AND
- R2.FROM_ENTITY_REFERENCE=ToEntityRef AND
- R2.TO_ENTITY_REFERENCE=FromEntityRef;
- dbms_output.put_line('Relationship end found');
- RETURN prRelend.ID;
- END IF;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- dbms_output.put_line('Relationship ends being inserted');
- cdapi.open_activity;
- if pCardinality = - 1 THEN
- vMaxCard := 1;
- else
- vMaxCard := 0;
- end if;
- IF pCardinality <> -2 THEN
- vMinCard := 0;
- ELSE
- vMinCard := 1;
- END IF;
- RelEnd1 := ERWRENIN(FromEntityRef,pName1,vMaxCard,
- vMinCard,-1);
- IF RelEnd1 = -1 THEN
- raise EndInsFail;
- END IF;
- IF pOptional = 'Y' THEN
- vMinCard := 0;
- ELSE
- vMinCard := 1;
- END IF;
- IF pType = 2 OR pType = 7 THEN
- vMaxCard := 1;
- ELSE
- vMaxCard := 0;
- END IF;
- RelEnd2 := ERWRENIN(ToEntityRef,pName2,vMaxCard,
- vMinCard,RelEnd1);
- IF RelEnd2 = -1 THEN
- raise EndInsFail;
- END IF;
- cdapi.validate_activity(act_status, act_warnings);
- cdapi.close_activity(act_status);
- if act_status != 'Y' then
- cdapi.abort_activity;
- RETURN -1;
- else
- RETURN RelEnd2;
- end if;
- EXCEPTION
- WHEN EndInsFail THEN
- if cdapi.activity is not null then
- cdapi.abort_activity;
- end if;
- RETURN -1;
- WHEN OTHERS THEN
- if cdapi.stacksize > 0 then
- if cdapi.activity is not null then
- cdapi.abort_activity;
- end if;
- else
- if cdapi.activity is not null then
- cdapi.abort_activity;
- end if;
- end if;
- RETURN -1;
- END;
- WHEN OTHERS THEN
- RETURN -1;
- END ERWRELIN;
- /
-